using System;
using System.Collections.Generic;
using Csla;
using Ent.AccesoDatos;
using System.Data;
using EntGuayasSLA.BL.Listas.Criterias;

namespace EntGuayasSLA.BL.Listas
{
    /// <summary>
    /// Estereotipo: ReadOnlyList
    /// Reponsabilidad: 
    /// Autor: Diana Ortega
    /// Fecha: 6/18/2013 9:31:03 AM
    /// </summary>
    [Serializable]
    public class RequisitoFaseLista : ReadOnlyListBase<RequisitoFaseLista, RequisitoFaseInfo>
    {
        #region Authorization Rules
        private static void AddObjectAuthorizationRules()
        {
            // TODO: add authorization rules
            //AuthorizationRules.AllowGet(typeof(RequisitoFaseLista), "Role");
        }
        #endregion

        #region Factory Methods

        /// <summary>
        /// Requisitos Obligatorios y todos requisitos
        /// </summary>
        /// <param name="filter"></param>
        /// <returns></returns>
        public static RequisitoFaseLista GetRequisitoFaseLista(RequisitoCriteriaObligatorio filter)
        {
            return DataPortal.Fetch<RequisitoFaseLista>(filter);
        }
        public RequisitoFaseLista()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        
        private void DataPortal_Fetch(RequisitoCriteriaObligatorio criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
                    {
                        new Parametro("ec_fas_codigo", criteria.Codigo),
                        new Parametro("ec_id_global", criteria.IdAdd),
                        new Parametro("ec_obligatorio", criteria.Obligatorio)
                    };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_REQUISITOFASE_OBLIGATORIO\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(RequisitoFaseInfo.GetRequisitoFase(items));
            }
            IsReadOnly = false;
            RaiseListChangedEvents = true;
        }
        #endregion
    }
    /// <summary>
    /// Estereotipo: ReadOnlyChild
    /// Reponsabilidad: 
    /// Autor: Diana Ortega
    /// Fecha: 6/18/2013 9:31:03 AM
    /// </summary>
    [Serializable]
    public class RequisitoFaseInfo : ReadOnlyBase<RequisitoFaseInfo>
    {
        #region Business Methods

        public Guid Id { get; internal set; }
        public string Nombre { get; internal set; }
        public string Obligatorio { get; internal set; }
        public string Formato { get; internal set; }
        #endregion

        #region Factory Methods

        internal static RequisitoFaseInfo GetRequisitoFase(DataRow childData)
        {
            return DataPortal.FetchChild<RequisitoFaseInfo>(childData);
        }

        private RequisitoFaseInfo()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void Child_Fetch(DataRow childData)
        {
            Id = Guid.Parse(childData["rfl_id"].ToString());
            Nombre = childData["rfl_nombre"].ToString();
            Obligatorio = childData["rfl_obligatorio"].ToString();
            Formato = childData["rfl_formato"].ToString();
        }

        #endregion
    }
}
